function PriorityQueue() {
    this.items = []

    // 封装一个新的构造函数，用来存元素和元素优先级
    function QueueElement(element,priority) {
        this.element = element
        this.priority = priority
    }

    // 添加元素的方法

    PriorityQueue.prototype.enqueue = function (element,priority) {
        var queueElement = new QueueElement(element,priority)

        if (this.isEmpty()) {
            // 第一个数据
            this.items.push(queueElement)
        } else {
            // 要比较，然后插入到合适的位置
            var added = false
            for(var i = 0;i < this.items.length;i++) {
                if (this.items[i].priority > queueElement.priority) {
                    // 插在这个元素的前面
                    this.items.splice(i,0,queueElement)
                    // 添加成功
                    added = true
                    break
                }
            }

            // 循环结束后都没有插到前面，说明就是要放在最后一位
            if (!added) {
                this.items.push(queueElement)
            }
        }      
    } 


    // dequeue()：移除队列的第一（即排在队列最前面的）项，并返回被移除的元素。
    PriorityQueue.prototype.dequeue = function () {
        return this.items.shift()
    }

    // front()：返回队列中第一个元素——最先被添加，也将是最先被移除的元素。
    PriorityQueue.prototype.front = function () {
        return this.items[0]
    }

    // isEmpty()：如果队列中不包含任何元素，返回true，否则返回false。
    PriorityQueue.prototype.isEmpty = function () {
        return this.items.length == 0
    }

    // size()：返回队列包含的元素个数，与数组的length属性类似。
    PriorityQueue.prototype.size = function () {
        return this.items.length
    }
}